﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using Model;
using BLL;

namespace HRP.Private.Funcionarios.HorasExtras
{
    public partial class Editar : System.Web.UI.Page
    {
        public string idField;
        private string _NomeFuncionario
        {
            get
            {
                if (ViewState["NomeFuncionario"] != null)
                {
                    return (string)ViewState["NomeFuncionario"];
                }
                return string.Empty;
            }
            set
            {
                ViewState["NomeFuncionario"] = value;
            }
        }
        public string NomeFuncionario
        {
            get
            {
                return _NomeFuncionario;
            }
            set
            {
                _NomeFuncionario = value;
            }
        }
        protected void Page_Load(object sender, EventArgs e)
        {
            if (Request.QueryString["id"] != null && Request.QueryString["funcId"] != null && Session["userid"] != null && Session["EmpresaActual"] != null && Session["idclient"] != null)
            {
                int funcId = 0;
                int horasExtraId = 0;
                int clienteId = (int)Session["idclient"];
                hrp_empresas empresa = (hrp_empresas)Session["EmpresaActual"];
                Int32.TryParse(Request.QueryString["funcId"], out funcId);
                Int32.TryParse(Request.QueryString["id"], out horasExtraId);
                if (funcId > 0 && Funcionario_BLL.Instance.FuncionarioExiste(clienteId, empresa.id, funcId)
                    && HorasExtras_BLL.Instance.HorasExtrasExiste(horasExtraId, funcId))
                {
                    if (!Page.IsPostBack)
                    {
                        var funcionarioActual = Funcionario_BLL.Instance.ObterFuncionario(clienteId, empresa.id, funcId);
                        hrp_horasextra horaExtraActual = funcionarioActual.HorasExtras.Where(f => f.id == horasExtraId).FirstOrDefault();
                        CarregarDados(horaExtraActual);
                        NomeFuncionario = funcionarioActual.Dados.nome;
                        hrp_contratos contratoFunc = Funcionario_BLL.Instance.ObterContratoFuncionario(funcId);
                        DateTime dataInicio = contratoFunc != null && contratoFunc.data_inicio.HasValue ? contratoFunc.data_inicio.Value : DateTime.MinValue;
                        DateTime dataFim = contratoFunc != null && contratoFunc.data_fim.HasValue ? contratoFunc.data_fim.Value : DateTime.MaxValue;
                        idField = "\n$(\"#" + diaHorasExtraTB.ClientID + "\"" + @").datepicker({ 
                                    dateFormat: 'yy-mm-dd', 
                                    monthNames: ['Janeiro','Fevereiro','Março','Abril','Maio','Junho','Julho','Agosto','Setembro','Outubro','Novembro','Dezembro'],
                                    dayNamesMin: ['D', 'S', 'T', 'Q', 'Q', 'S', 'S'],
                                    dayNamesShort: ['Dom', 'Seg', 'Ter', 'Qua', 'Qui', 'Sex', 'Sab'],
                                    minDate: new Date('" + dataInicio.ToString("yyyy/MM/dd") + @"'),
                                    maxDate: new Date('" + dataFim.ToString("yyyy/MM/dd") + @"')});";
                    }
                    RegistoHorasExtrasPanel.Visible = true;
                    erroPanel.Visible = false;
                    msgPanel.Visible = false;
                }
                else
                {
                    RegistoHorasExtrasPanel.Visible = false;
                    erroPanel.Visible = true;
                    msgPanel.Visible = false;
                }
                criarHorasExtraBT.Click += new EventHandler(criarHorasExtraBT_Click);
            }
            else
            {
                RegistoHorasExtrasPanel.Visible = false;
                erroPanel.Visible = true;
                msgPanel.Visible = false;
            }

        }

        private void CarregarDados(hrp_horasextra horaExtraActual)
        {
            diaHorasExtraTB.Text = horaExtraActual.data_inicio.ToString("yyyy/MM/dd");
            numeroHorasTB.Text = horaExtraActual.numeroHoras.ToString();
            //TODO: fazer selectedIndex dinamico
            valorDropDown.SelectedIndex = horaExtraActual.valor == 0.5 ? 0 : horaExtraActual.valor == 0.75 ? 1 : 2;
            obsTB.Text = horaExtraActual.obs;
        }

        void criarHorasExtraBT_Click(object sender, EventArgs e)
        {
            if (!Page.IsValid)
                return;

            if (Request.QueryString["id"] != null && Request.QueryString["funcId"] != null && Session["userid"] != null && Session["EmpresaActual"] != null && Session["idclient"] != null)
            {
                int horasExtraId = 0;
                int funcId = 0;
                Int32.TryParse(Request.QueryString["funcId"], out funcId);
                Int32.TryParse(Request.QueryString["id"], out horasExtraId);
                if (funcId > 0 && horasExtraId>0)
                {
                    int clienteId = (int)Session["idclient"];
                    hrp_empresas empresa = (hrp_empresas)Session["EmpresaActual"];
                    DateTime dataInicio = Convert.ToDateTime(diaHorasExtraTB.Text);
                    var numerohoras = Convert.ToInt32(numeroHorasTB.Text);
                    HorasExtras_BLL.Instance.AlterarHorasExtra(horasExtraId, empresa.id,
                        funcId, dataInicio, obsTB.Text.Trim(), Request.UserHostAddress,
                        Session["userid"].ToString(), Convert.ToDouble(valorDropDown.SelectedValue), numerohoras);

                    RegistoHorasExtrasPanel.Visible = false;
                    erroPanel.Visible = false;
                    msgPanel.Visible = true;
                    return;
                }
            }
            RegistoHorasExtrasPanel.Visible = false;
            erroPanel.Visible = true;
            msgPanel.Visible = false;

        }
    }
}